package com.example.tool.widget.mpview;

import android.content.Context;

import com.example.tool.R;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;

import java.util.ArrayList;
import java.util.List;

/**
 * Mp辅助类
 */
public class MPChartHelper {
    /**
     * 单线单y轴图。
     *
     * @param lineChart
     * @param xAxisValue
     * @param yAxisValue
     * @param title
     * @param context    上下文
     */
    public static void setLineChart(LineChart lineChart, List<String> xAxisValue, List<Float> yAxisValue, String title, Context context) {
        List<String> titles = new ArrayList<>();
        titles.add(title);
        setLinesChart(lineChart, xAxisValue, yAxisValue, titles, null, context);
    }

    /**
     * 绘制线图，默认最多绘制三种颜色。所有线均依赖左侧y轴显示。
     *
     * @param lineChart
     * @param xAxisValue   x轴的轴
     * @param yXAxisValues y轴的值
     * @param titles       每一个数据系列的标题
     * @param lineColors   线的颜色数组。为null时取默认颜色，此时最多绘制三种颜色。
     * @param context
     */
    public static void setLinesChart(LineChart lineChart, List<String> xAxisValue, List<Float> yXAxisValues, List<String> titles, int[] lineColors, Context context) {
        lineChart.getDescription().setEnabled(false);//设置描述
        lineChart.setPinchZoom(false);//设置按比例放缩柱状图
        //设置是否可以缩放 x和y，默认true
        lineChart.setScaleEnabled(false);

        CountMarkerView markerView = new CountMarkerView(lineChart.getContext(), R.layout.count_marker_view);
        lineChart.setMarker(markerView);

        //x坐标轴设置
        IAxisValueFormatter xAxisFormatter = new CountAxisValueFormatter(xAxisValue);
        XAxis xAxis = lineChart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawGridLines(false);
        xAxis.setLabelCount(xAxisValue.size());
        xAxis.setTextSize(10);
//        xAxis.setTextColor(Color.parseColor("#999999"));
        xAxis.setTextColor(context.getResources().getColor(R.color.color_999999));
        xAxis.setValueFormatter(xAxisFormatter);

        //忽略X轴表签数，设置显示多少个月份
        xAxis.setLabelCount(6, true);
        //设置底部月份的说明
//        xAxis.setYOffset(-10f);

        xAxis.setAvoidFirstLastClipping(false);//图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘


        //y轴设置 隐藏
        lineChart.getAxisLeft().setEnabled(false);
        //设置纵坐标的从0开始,最大值,控制底坐标的起点
        lineChart.getAxisLeft().setAxisMinimum(0f);
//        lineChart.getAxisLeft().setYOffset(-20f);
        lineChart.getAxisLeft().setAxisMaximum(100f);
//        lineChart.getAxisLeft().setAxisLineWidth(2f);
        lineChart.getAxisRight().setEnabled(false);
        //设置图表中的最高值的顶部间距占最高值的值的百分比（设置的百分比 = 最高柱顶部间距/最高柱的值）。默认值是10f，即10% 。
        //图例设置,隐藏
        lineChart.getLegend().setEnabled(false);

        //设置柱状图数据
        setLinesChartData(lineChart, yXAxisValues, titles, lineColors, context);

    }

    private static void setLinesChartData(LineChart lineChart, List<Float> yXAxisValues, List<String> titles, int[] lineColors, Context context) {

        List<Entry> entriesList = new ArrayList<>();
        for (int i = 0; i < yXAxisValues.size(); ++i) {

            entriesList.add(new Entry(i, yXAxisValues.get(i), context.getResources().getDrawable(R.drawable.common_dot)));

        }
        LineDataSet set;
        if (lineChart.getData() != null && lineChart.getData().getDataSetCount() > 0) {
            set = (LineDataSet) lineChart.getData().getDataSetByIndex(0);
            set.setValues(entriesList);
            lineChart.getData().notifyDataChanged();
            lineChart.notifyDataSetChanged();
        } else {
            ArrayList<ILineDataSet> dataSets = new ArrayList<>();

            set = new LineDataSet(entriesList, "");
            //不绘制面
            set.setMode(LineDataSet.Mode.LINEAR);
            set.setDrawFilled(true);
//            set.setFillColor(Color.parseColor("#FFF8EF"));
            set.setFillColor(context.getResources().getColor(R.color.color_fff8ef));
            //绘制线的颜色
//            set.setColor(Color.parseColor("#fecb00"));
            set.setColor(context.getResources().getColor(R.color.color_fecb00));
            set.setLineWidth(2);
            //设置原点的颜色
            set.setDrawIcons(true);

            dataSets.add(set);

            LineData data = new LineData(dataSets);

            data.setDrawValues(false);

            lineChart.setData(data);
        }
    }

}
